
class Animal { }
class Cat extends Animal { }
class Dog extends Animal { }
function capture<Animal>(x: Cage<Animal>) {
    x.inner = new Dog();   // 这里报错，但是在填入函数参数不报错，即不该在这里实例化
}
class Cage<T> {
    inner: T;
}
capture(new Cage<Dog>())  // 是这样使用